#ifndef PREREQUISITES_H
#define PREREQUISITES_H

#include "Framework/Definitions.h"
#include "Framework/StdHeaders.h"
#include "Framework/Types.h"

namespace tyro
{	
	namespace Camera
	{
		class Camera;

		typedef map<String, Camera*>::type CameraMap;
	}
	namespace Engine
	{
		class Engine;
		class FrameEvent;
		class FrameListener;
		class Program;
	}

	namespace Framework
	{
#if TYRO_DEFINITION == TYRO_DEFINITION_ANDROID
		class AndroidTimer;
#elif TYRO_DEFINITION == TYRO_DEFINITION_WIN32
		class Win32Timer;
#endif


		class ITimer;
	}

	namespace Geometry
	{
		class Frustum;
	}

	namespace Graphics
	{
		class Colour;
		class IRenderEngine;
		class IRenderTarget;
		class IRenderWindow;
		class IViewport;

		typedef map<INT_32, IViewport*>::type ViewportMap;
	}

	namespace Math
	{
		template <class T> class Degree;
		template <class T> class Matrix2;
		template <class T> class Matrix3;
		template <class T> class Matrix4;
		template <class T> class Quaternion;
		template <class T> class Radian;
		template <class T> class Vector2;
		template <class T> class Vector3;
		template <class T> class Vector4;

		/* Type definitions */
		typedef Matrix2<FLOAT_32> Matrix2f;
		typedef Matrix2<FLOAT_64> Matrix2d;
		typedef Matrix3<FLOAT_32> Matrix3f;
		typedef Matrix3<FLOAT_64> Matrix3d;
		typedef Matrix4<FLOAT_32> Matrix4f;
		typedef Matrix4<FLOAT_64> Matrix4d;
		typedef	Quaternion<FLOAT_32> Quaternionf;
		typedef Quaternion<FLOAT_64> Quaterniond;
		typedef Radian<FLOAT_32> Radianf;
		typedef Radian<FLOAT_64> Radiand;
		typedef Vector2<FLOAT_32> Vector2f;
		typedef Vector2<FLOAT_64> Vector2d;
		typedef Vector3<FLOAT_32> Vector3f;
		typedef Vector3<FLOAT_64> Vector3d;
		typedef Vector4<FLOAT_32> Vector4f;
		typedef Vector4<FLOAT_64> Vector4d;

	}

	namespace OS
	{
		class WindowEventListener;
		class WindowEventUtils;

		typedef multimap<Graphics::IRenderWindow*, WindowEventListener*>::type WindowEventListeners;
	}

	namespace Scene
	{
		class SceneGraph;
	}

	
}

#endif
